﻿namespace Framework.Core.Util
{
	public class AppSettings
	{
		private static IConfiguration GetConfiguration()
		{
            return App.Configuration;
		}

		/// <summary>
		/// 封装要操作的字符
		/// </summary>
		/// <param name="sections">节点配置</param>
		/// <returns></returns>
		public static string GetConfiguration(params string[] sections)
		{
			try
			{
				if (sections.Any())
				{
					return GetConfiguration()[string.Join(":", sections)];
				}
			}
			catch (Exception ex)
			{
				Console.WriteLine(ex.Message);
			}

			return "";
		}

		/// <summary>
		/// 递归获取配置信息数组
		/// </summary>
		/// <typeparam name="T"></typeparam>
		/// <param name="sections"></param>
		/// <returns></returns>
		public static List<T> Bind<T>(params string[] sections)
		{
			List<T> list = new();
			// 引用 Microsoft.Extensions.Configuration.Binder 包
			GetConfiguration().Bind(string.Join(":", sections), list);
			return list;
		}
		public static T Bind<T>(string key, T t)
		{
			GetConfiguration().Bind(key, t);

			return t;
		}

		public static T GetAppConfig<T>(string key, T defaultValue = default)
		{
			T setting = (T)Convert.ChangeType(GetConfiguration()[key], typeof(T));
			var value = setting;
			if (setting == null)
				value = defaultValue;
			return value;
		}

		/// <summary>
		/// 获取配置文件 
		/// </summary>
		/// <param name="key">eg: WeChat:Token</param>
		/// <returns></returns>
		public static string GetConfig(string key)
		{
			return GetConfiguration()[key];
		}

		/// <summary>
		/// 获取配置节点并转换成指定类型
		/// </summary>
		/// <typeparam name="T">节点类型</typeparam>
		/// <param name="key">节点路径</param>
		/// <returns>节点类型实例</returns>
		public static T Get<T>(string key)
		{
			return GetConfiguration().GetSection(key).Get<T>();
		}
	}
}
